\chapter{Systemdesign}

\section{Workflow diagram}
\begin{figure}[!h]
\includegraphics[width=\textwidth,keepaspectratio]{diagrammer/workflow.png}
	\caption{Workflow-diagram for én komplet handel}
	\label{workflow}
\end{figure}

\section{Hændelsestabel (TO BE)}
\begin{figure}[!h]
	\includegraphics[width=\textwidth,keepaspectratio]{diagrammer/to-be.png}
	\caption{TO BE-hændelsestabel for system}
	\label{to-be}
\end{figure}

\section{Mock-up}
Mock-up'en som viser administrations siden af varestyringen, giver et indblik i hvordan det nye IT-system forventes at se ud efter lagerstyringsdelen er fuldt ud implementeret. Dette er derfor ikke en repræsentation af hvordan systemet kommer til at se ud efter første iteration, hvor det kun er salgsdelen der implementeres, samt de mest basale funktioner der er krævet for at få "Opret salgsordre" use casen til at fungere.
\\Som man kan se i mock-up'en skulle det i fremtiden gerne være muligt at kunne søge på bestemte varer på hvert af de to lagre som virksomheden råder over. Det er desuden også muligt at redigere i en vares informationer i samme vindue som man søger efter varer i, da det virker mere praktisk, end at skulle have flere vinduer åbne til individuelle varer.

\section{Mock-up af systemets administrations-GUI}
\begin{figure}[!h]
	\includegraphics[width=\textwidth,keepaspectratio]{diagrammer/mock-up-administration.png}
	\caption{System mock-up}
	\label{mock-up}
\end{figure}

\section{Funktionelle krav}

\subsection{Use case diagram}
\begin{figure}[!h]
	\includegraphics[width=\textwidth,keepaspectratio]{diagrammer/use-case-diagram.png}
	\caption{Use-case diagrammer}
	\label{use-case-diagrammer}
\end{figure}

\begin{

\paragraph{Håndter varer (CRUD)}En medarbejder ønsker at oprette en ny vare, finde en allerede eksisterende vare, rette i attributterne for en allerede eksisterende vare, eller at slette en allerede eksisterende vare i lagersystemet. Medarbejderen foretager alle disse operationer i listen over varer i lageret, hvorefter systemet gemmer de foretagede ændringer.
\paragraph{Prissætning (CRUD)}Ledelsen ønsker at oprette en pris på et produkt, finde et allerede eksisterende produkt, rette i attributterne for et allerede eksisterende produkt, eller slette et allerede eksisterende produkt. Ledelsen foretager alle disse operationer i listen over varer i lageret, hvorefter systemet gemmer de foretagede ændringer.
\paragraph{Leverandørstyring (CRUD)}Medarbejderen ønsker at oprette en ny leverandør, finde en allerede eksisterende leverandør, rette i attributterne for en allerede eksisterende leverandør, eller slette en allerede eksisterende leverandør. Medarbejderen foretager alle disse operationer i listen over leverandører, hvorefter systemet gemmer de foretagede ændringer.
\paragraph{Kundestyring (CRUD)}Medarbejderen ønsker at oprette en ny kunde, finde en allerede eksisterende kunde, rette i attributterne for en allerede eksisterende kunde, eller slette en allerede eksisterende kunde. Medarbejderen foretager alle disse operationer i listen over kunder, hvorefter systemet gemmer de foretagede ændringer.
\paragraph{Opret salgsordre}En kunde ønsker at købe en vare fra centret. Hvis varen er på lager tilføjer medarbejderen den til en nyoprettet salgsordre sammen med kundens informationer. Hvis varen ikke er på lager, oprettes en ny hjembestilling på varen, hvorefter den reserveres til salgsordren sammen med kundens informationer. Herefter betaler kunden så for de varer de har købt/bestilt og salgsordren sættes som enten “afsluttet” eller “afventer hjembestilling”, hvorefter den bliver gemt i systemet og salget afsluttes.
\paragraph{Levering af varer (fra salgsordre)}En hjembestilt vare, som er blevet modtaget i centret og som tilhører en salgsordre, leveres til den pågældende kunde, hvorefter status på salgsordren ændres til leveret og bliver dernæst automatisk bogført i systemet.
\paragraph{Hjembestilling af varer (ved minimumsbeholdning)}En medarbejder ønsker at hjembestille et parti varer fra en forhandler. Medarbejderen opretter en ny hjembestilling med det ønskede antal varer og angiver forhandleren på varen. Medarbejderen tilføjer evt. flere varer til bestillingen, med hver deres leverandør angivet. Efter alle ønskede varer er anført, bliver bestillingen sendt afsted til de pågældende leverandører, hvorefter status på de anførte varer sættes til bestilt og hjembestillingen gemmes i systemet.
\paragraph{Modtagelse af varer (fra hjembestilling)}Efter et hjembestilt parti varer modtages i centret, angives varerne som ankommet og hjembestillingen bogføres automatisk i systemet.

\subsection{Fully dressed beskrivelse af den mest komplekse use case}
\begin{figure}[!h]
	\includegraphics[width=\textwidth,keepaspectratio]{diagrammer/fully-dressed-create-order.png}
	\caption{Fully dressed beskrivelse af use casen “Opret salgsordre”}
\end{figure}


\section{Informationskrav}
I de følgende afsnit listes og analyseres alle informationskrav til systemet.

\subsection{Domænemodel}

\begin{figure}[!h]
	\includegraphics[width=\textwidth,keepaspectratio]{diagrammer/domaenemodel.png}
	\caption{Domænemodel for systemet}
	\label{domain-model}
\end{figure}

\subsection{SSD’er} SSD for use casen “Opret salgsordre”

\begin{figure}[!h]
	\includegraphics[width=\textwidth,keepaspectratio]{diagrammer/ssd.png}
	\caption{SSD for den mest komplekse use-case}
	\label{ssd}
\end{figure}


\subsection{Operationskontrakter - for de metoder der medfører ændring af data}

Operation: createSale() \\
Use case: Opret salgsordre\\
Præbetingelser: 	Kunder er oprettet i systemet\\
Post betingelser:	En instans S af Sale er blevet oprettet\\

Operation: 		addItemToSale(id)\\
Use case: 		Opret salgsordre\\
Præbetingelser: 	Kunder er oprettet i systemet, en instans S af Sale er blevet oprettet. En instans I af Item er oprettet i systemet.\\
Post betingelser: 	En instans I er blevet tilskrevet til et Sale.\\

Operation: 		addCustomer(id)\\
Use case: 		Opret salgsordre\\
Præbetingelser: 	Kunder er oprettet i systemet. En instans S (Sale) er blevet oprettet.\\
Post betingelser:	Instans S, har fået tilskrevet en Værdi i form af en kunde.\\

Operation: 		printReceipt()\\
Use case: 		Opret salgsordre\\
Præbetingelser: 	Kunder er oprettet i systemet. S (Sale) har I (item) og en kunde\\
Post betingelser:	En ArrayList R er blevet tilskrevet Værdierne fra S(sale)\\

\subsection{Anvendelse af trelagsarkitektur}
Under tre-lags arkitekturen bliver ens kode delt i tre lag. Det er lettere at overskue den kode der bliver skrevet, da alting ligger et bestemt sted og derfor er nemmere at finde. De tre lag som koden bliver delt ind i er UI laget, kontrol laget og model laget. 
\\I UI-laget håndteres alle interaktioner mellem aktøren (brugeren) og grænsefladen. Det er i UI laget at al præsentation af vinduer, grafik, tekst og andet det foregår.
\\Kontrollaget sørger for at afvikle de forskellige use cases og foretager komplicerede procedurer og beregninger på den data der ligger i systemet.
\\Model laget tager sig af opbevaring og redigering af de nødvendige informationer og data. Det er altså i dette lag at man finder container klasser og de objekter som der bliver anvendt i det pågældende IT system.
\\Det er desuden vigtigt at sørge for at der er lav ”coupling” og høj ”cohesion” i den færdige kode. 
\\Lav coupling sørger for at hvis der ændres i en klasse, skal der ikke rettes i mange andre klasser, for at koden vil virke på tværs af klasser og funktioner. Høj cohesion sørger for at hver klasse kun beskæftiger sig med de ting som det giver mening at de beskæftiger sig med. Fordelen ved opdeling i tre-lags arkitekturen, er at det er nemmere at håndtere større datamængder og det er lettere at overskue ens kode.

\subsection{Interaktionsdiagram}

\begin{figure}[!h]
	\includegraphics[width=\textwidth,keepaspectratio]{diagrammer/interaktionsdiagram.png}
	\caption{Interaktionsdiagram for use casen “opret salgsordre”}
	\label{interaktionsdiagram}
\end{figure}

\subsection{Designklassediagram}

\begin{figure}[!h]
	\includegraphics[width=\textwidth,keepaspectratio]{diagrammer/designklassediagram.png}
	\caption{Designklassediagram for IT-systemet}
	\label{interaktionsdiagram}
\end{figure}